package cn.openea.perpartner.componet.web.service;

import cn.openea.perpartner.componet.web.entity.InsMsg;
import cn.openea.perpartner.componet.web.vo.R;
import com.alibaba.fastjson.JSONObject;
/**
 * @codeDesc: 从公众号发送消息到个人
 *  包含发送：普通文本消息、模板消息
 * @author: Mr.Yun
 * @QQ: 2034374624
 * @version: V2.0
 * @Created: 2023/02/14 18:09
 */
public interface ISendMsgService {
    /**
     * 从公众号通过客服方式发送普通文本消息到个人
     *  注意，这个消息发送需要接收消息的个人打开公众号，并与公众号有互动时才能发送，否则不能发送成功，已很少使用
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param textmsg 需要发送的消息
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTextMsg(String toWxOpenid, String textmsg);

    /**
     * 从公众号发送模板消息到个人，传入消息的实体对象
     * @param msg 需要发送的消息实体对象
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(InsMsg msg);

    /**
     * 从公众号发送模板消息到个人，传入消息所在记录的标记
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param msg 需要发送的消息实体对象
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(String toWxOpenid, InsMsg msg);

    /**
     * 从公众号发送模板消息到个人，自主传入消息参数
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param template_id 模板id
     * @param url 模板跳转链接（海外帐号没有跳转能力）
     * @param miniappdata 跳小程序所需数据，不需跳小程序可不用传该数据
     * @param msgdata 发送的消息信息替换的内容
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(String toWxOpenid, String template_id, String url, JSONObject miniappdata, JSONObject msgdata);

    /**
     * 从公众号发送模板消息到个人，自主传入消息参数，重载函数
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param template_id 模板id
     * @param miniappdata 跳小程序所需数据，不需跳小程序可不用传该数据
     * @param msgdata 发送的消息信息替换的内容
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(String toWxOpenid, String template_id, JSONObject miniappdata, JSONObject msgdata);

    /**
     * 从公众号发送模板消息到个人，自主传入消息参数，重载函数
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param template_id 模板id
     * @param url 模板跳转链接（海外帐号没有跳转能力）
     * @param msgdata 发送的消息信息替换的内容
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(String toWxOpenid, String template_id, String url, JSONObject msgdata);

    /**
     * 从公众号发送模板消息到个人，自主传入消息参数，重载函数
     * @param toWxOpenid 接收消息的个人，在公众号的openid身份
     * @param template_id 模板id
     * @param msgdata 发送的消息信息替换的内容
     * @return 消息发送的结果，JSON串，一般是调用消息发送接口后从公众号返回的内容
     */
    R sendTemplateMsg(String toWxOpenid, String template_id, JSONObject msgdata);

    // 定时发送消息，用于之前仅将消息存于表中未发送时的处理
    void timedSendMessage();

}
